package day18.Junit_reflect_annotation_proxy.annotationdemo;

import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

//模拟junit，有我的mytest注解的就执行，没有就不执行
public class demo2
{
    public static void main(String[] args)
    {
        demo2 d2=new demo2();
        //1获取本类
        Class c1=d2.getClass();
        //2获取所有方法
        Method[] mds=c1.getDeclaredMethods();
        //3遍历方法，判断方法上是否有mytest注解，有就执行，没有就不执行
        for(Method md : mds)
        {
            if(md.isAnnotationPresent(Mytest.class))
            {
                try {
                    Mytest mt=md.getDeclaredAnnotation(Mytest.class);//那到了注解的实例化对象
                    int count =mt.count();//控制测试方法的次数
                    for(int i=0;i<count;i++)
                    {
                        md.invoke(d2);
                    }

                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
    @Mytest
    public void func1()
    {
        System.out.println("func1执行了");
    }


    public void func2()
    {
        System.out.println("func2执行了");
    }
    @Mytest(count=5)//加上注解看这段代码要不要特殊化处理，而注解里面的属性是看他怎么处理，比如这里，count=5，就测试5次，默认1次
    public void func3()
    {
        System.out.println("func3执行了");
    }

    public void func4()
    {
        System.out.println("func4执行了");
    }

}
